package caip2025n.rcv3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

class BTree {
	// 节点数据
	public int d;
	// 左子节点
	public BTree lc;
	// 右子节点
	public BTree rc;

	public BTree(int d) {
		this.d = d;
		this.lc = null;
		this.rc = null;
	}
}

public class Main {

	// 先序序列
	static int[] preArr;
	// 中序序列
	static int[] midArr;
	// 后序序列
	static int[] lastArr;
	
	//输入优化模板开始
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer st = new StreamTokenizer(br);
	static int rd() throws IOException {
		st.nextToken();
		return (int) st.nval;
	}
	//输入优化模板结束

	// 先序中序还原二叉树
	// pre先序序列开始位置
	// mid中序序列开始位置
	// len序列长度
	static BTree preMidBTree(int pre, int mid, int len) {
		if (len == 0)
			return null;
		int ch = preArr[pre]; // 先序第一个为根
		int index = 0; // 中序中查找根节点，index记录长度
		while (midArr[index + mid] != ch)
			index++;
		BTree bt = new BTree(ch);
		// 创建左子树
		bt.lc = preMidBTree(pre + 1, mid, index);
		// 创建右子树
		bt.rc = preMidBTree(pre + index + 1, mid + index + 1, len - index - 1);
		return bt;
	}
	
	
	// 后序中序还原二叉树
	// last后序序列开始位置
	// mid中序序列开始位置
	// len序列长度
	static BTree lastMidBTree(int last, int mid, int len) {
		if (len == 0)
			return null;
		int ch = lastArr[last + len - 1]; // 后序最后一个为根
		int index = 0; // 中序中查找根节点，index记录长度
		while (midArr[index + mid] != ch)
			index++;
		BTree bt = new BTree(ch);
		// 创建左子树
		bt.lc = lastMidBTree(last, mid, index);
		// 创建右子树
		bt.rc = lastMidBTree(last + index, mid + index + 1, len - index - 1);
		return bt;
	}

	// 后序中序还原二叉树并记录层数
	// last后序序列开始位置
	// mid中序序列开始位置
	// len序列长度
	// n表示节点层数
	static BTree lastMidBTree(int last, int mid, int len,int n) {
		if (len == 0)
			return null;
		int ch = lastArr[last + len - 1]; // 后序最后一个为根
		int index = 0; // 中序中查找根节点，index记录长度
		while (midArr[index + mid] != ch)
			index++;
		BTree bt = new BTree(ch);
		// 创建左子树，层数加1
		bt.lc = lastMidBTree(last, mid, index,n+1);
		// 创建右子树，层数加1
		bt.rc = lastMidBTree(last + index, mid + index + 1, len - index - 1,n+1);
		if(bt.d%n!=0) {
			//节点数据不是层数的倍数
			ans = 0;
		}
		return bt;
	}
	
	//保存是否为自然倍树
	static int ans;
	public static void main(String[] args) throws IOException {
		int m = rd();
		while(m>0) {
			m--;
			int n = rd();
			lastArr = new int[n];
			midArr = new int[n];
			for(int i=0;i<n;i++) {
				lastArr[i] = rd();
			}
			for(int i=0;i<n;i++) {
				midArr[i] = rd();
			}
			//默认是自然倍树
			ans = 1;
			//重建二叉树，同时检测是否为自然倍树
			//如有不符合的节点，ans设为0
			BTree t = lastMidBTree(0,0,n,1);
			System.out.println(ans);
		}

	}

}
